﻿#include "Sqlit.h"


void Sqli_init(SqList* ps)//初始化函数
{
	ps->arr = NULL;
	ps->count = ps->size = 0;

}

void Sqli_Setmemory(SqList* ps)//扩展大小
{
	assert(ps);
	if (ps->count == ps->size)
	{
		//如果顺序表长度为0，默人开辟4块数SqLiData大小空间，如果不为0开辟原本顺序表长度的的两倍空间
		int newszie = ps->size == 0 ? 4 : 2 * ps->size;
		SqLiData* temp = realloc(ps->arr, newszie * sizeof(SqLiData));
		if (temp == NULL)
		{
			perror("realloc is down");
			exit(1);//退出程序
		}
		ps->arr = temp;
		ps->size = newszie;
	}
	
}

void Sqli_destroy(SqList* ps)//销毁函数
{
	assert(ps->arr);
	free(ps->arr);
	ps->arr = NULL;
	ps->count = ps->size = 0;
}

void Sqli_insert_front(SqList* ps, SqLiData x)//前方插入
{
	Sqli_Setmemory(ps);
	int i = 0;
	for (i = ps->count; i > 0; i--)
	{
		ps->arr[i] = ps->arr[i - 1];

	}
	ps->arr[i] = x;
	ps->count++;

}

//void Sqli_print(SqList* ps)//打印内容
//{
//	assert(ps);
//	int i = 0;
//	for (i = 0; i < ps->count; i++)
//	{
//		printf("%d ", ps->arr[i]);
//	}
//	printf("\n");
//}

void Sqli_insert_behind(SqList* ps, SqLiData x)//后方插入
{
	Sqli_Setmemory(ps);
	ps->arr[ps->count] = x;
	ps->count++;
}

void Sqli_del_front(SqList* ps)// 前方删除
{
	assert(ps);
	assert(ps->count);
	int i = 0;
	for (i = 0; i < ps->count-1; i++)
	{
		ps->arr[i] = ps->arr[i + 1];
	}
	ps->count--;
}

void Sqli_del_behind(SqList* ps)//后方删除
{
	assert(ps);
	assert(ps->count);
	ps->count--;
}


void Sqli_insert_arbitrary(SqList* ps, int num, SqLiData x)//任意位置插入
{
	assert(num >= 0 && num <= ps->count);
	
	Sqli_Setmemory(ps);
	int i = 0;
	for (i = ps->count; i>num; i--)
	{
		ps->arr[i] = ps->arr[i - 1];

	}
	ps->arr[i] = x;
	ps->count++;
}


void Sqli_del_arbitrary(SqList* ps, int num)//任意位置删除
{

	assert(num >= 0 && num < ps->count);
	int i = 0;
	for (i = num; i < ps->count-1; i++)
	{
		ps->arr[i] = ps->arr[i + 1];
	}
	ps->count--;
}

//int Sqli_ser(SqList* ps, SqLiData x)//查找数据位置
//{
//	assert(ps);
//	int i = 0;
//	for (i = 0; i < ps->count; i++)
//	{
//		if (ps->arr[i] == x)
//		{
//			return i;
//		}
//	}
//	return -1;
//}
